home *** CD-ROM | disk | FTP | other *** search
- #ifndef HEADER_PIC
- #define HEADER_PIC
-
- #include "screen.h"
- #include "pen.h"
- #include "area.h"
-
- /* 画像 */
-
- typedef struct {
- int wid,ht;
- char *buf;
- FRAME update;
- int pixelsize;
- } PIC;
-
- /* ピクセルの色 */
-
- typedef struct {
- char r,g,b;
- } PIXEL;
-
- int pic_init(void);
- void pic_close(void);
- PIC *pic_new(int pixelsize,int width,int height);
- PIC* pic_dup(PIC* pic);
- void pic_destroy(PIC *pic);
- #define pic_delete pic_destroy
-
- void pic_setPixelXy(PIC *pic, int x, int y, PIXEL *pixel);
- void pic_getPixelXy(PIC *pic, int x, int y, PIXEL *pixel);
-
- void pic_grayPset(PIC* pic,int x,int y,int gray,PIXEL *pixel);
- void pic_grayhline(PIC *pic,int x1,int x2,int y,int gray,PIXEL *pixel);
- void pic_psetpen(PIC *pic,int x,int y,Pen pen,PIXEL *pixel);
- void pic_putGrayBlock(PIC *pic,int x,int y,
- char *graypat,int wid,int ht, PIXEL *pixel);
- void pic_clear(PIC *pic, PIXEL *pixel);
- void pic_kosuriStart(PIC* pic,int x,int y,char* graypat,int wid,int ht);
- void pic_kosuriDrag(PIC* pic,int x,int y,int r);
-
- void pic_beginUpDate(PIC *pic);
- void pic_endUpDate(PIC *pic, FRAME *frame);
-
- void pic_copy(PIC* picSrc, FRAME* frSrc, PIC* picDest, POINT* ptDest);
- // update 管理を忘れないこと!
- void pic_copyarea(PIC* picSrc, AREA areaSrc, PIC* picDest, POINT* ptDest);
- void pic_paint(PIC *pic, int x,int y, PIXEL* pix);
- void pic_blot(PIC *pic,int x,int y,int branch,int depth,PIXEL* pix);
- void pic_diffusePen(PIC* pic,int x,int y,Pen pen);
- void pic_sandPen(PIC* pic,int x,int y,Pen pen);
- void pic_polygon(PIC* pic,POINT* points,int nPoint,PIXEL* pix);
- void pic_fillarea(PIC* pic,AREA area,PIXEL* pix);
-
- int pic_loadTIFF_(PIC *pic, char *fname);
- int pic_saveTIFF_(PIC *pic, char *fname);
- // void pic_getRectImage( PIC *pic, char *buf, FRAME *fr );
-
- void pic_getScrBitMap(PIC* pic, SCRBITMAP bm, int ofsx, int ofsy, FRAME *fr,
- int zoom);
- // 画像内の fr(x,y,wid,ht) の領域を bm の ofsx, ofsy に転送する
- #define pic_getScrBitmap pic_getScrBitMap
-
- void pixel_setRgb(PIXEL *pixel, int r, int g, int b);
- void pixel_getRgb(PIXEL *pixel, int *r, int *g, int *b);
-
- #define PICOFFSET(pic,x,y) (((pic)->wid*(y)+(x))*(pic)->pixelsize /8)
-
- #define PICADDR(pic,x,y) ((pic)->buf + PICOFFSET(pic,x,y))
-
- #define CODE32K(pix) \
- ((((unsigned int)(pix).r >> 3) << 5) | \
- (((unsigned int)(pix).g >> 3) << 10) | \
- (((unsigned int)(pix).b >> 3)))
-
- #define CODE16M(pix) \
- (((uint)(pix).g << 8) | ((uint)(pix).r) | ((uint)(pix).b << 16))
-
- #define SETBYTE3(p,n) \
- (*(ushort*)(p)=(ushort)((uint)(n) & 0xffff), \
- *(((char*)(p))+2) = ((uint)(n)>>16)&0xff)
-
- #define GETBYTE3(p) (*(ushort*)(p)) | (((uint)*((char*)(p)+2)) << 16)
-
- #define GET3BYTE(ptr,a,b,c) ((a)=(ptr)[0],(b)=(ptr)[1],(c)=(ptr)[2])
-
- #define COLCODE(pix) (scrPixelSize==16 ? CODE32K(pix) : CODE16M(pix))
-
- #define SETRGB32K(pix, col) \
- ((pix).r = ((((col) >> 5) & 31) * 255 + 15) / 31, \
- (pix).g = ((((col) >> 10) & 31) * 255 + 15) / 31, \
- (pix).b = ((((col) ) & 31) * 255 + 15) / 31)
-
- #define GETRGB31(code,r,g,b) \
- ((g) = ((uint)code >> 10) & 31, \
- (r) = ((uint)code >> 5) & 31, \
- (b) = ((uint)code) & 31)
-
- #define SETRGB31(code,r,g,b) \
- ((code) = ((uint)(g)<<10) | ((uint)(r)<<5) | ((uint)b))
-
- #endif HEADER_PIC
-